using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;

using NuMetaheuristics;

namespace NuMetaheuristics.Genotypes
{
    //[DataContract(Namespace = "http://numetaheuristics.codeplex.com/schemas")]
    //public class Matrix2DGenotype<E> : IGenotype<Matrix2DGenotype<E>>
    //{
    //    [DataMember]
    //    E[,] _matrix;

    //    public Matrix2DGenotype()
    //    {
    //        _matrix = new E[1, 1];
    //    }

    //    public Matrix2DGenotype(int xDim, int yDim)
    //    {
    //        _matrix = new E[xDim, yDim];
    //    }

    //    public Matrix2DGenotype(Matrix2DGenotype<E> other)
    //    {
    //        _matrix = new E[other._matrix.GetLength(0), other._matrix.GetLength(1)];

    //        for (int i = 0; i < other._matrix.GetLength(0); i++)
    //        {
    //            for (int j = 0; j < other._matrix.GetLength(1); j++)
    //            {
    //                _matrix[i, j] = other._matrix[i, j];
    //            }
    //        }
    //    }

    //    public Matrix2DGenotype<E> Create()
    //    {
    //        return new Matrix2DGenotype<E>();
    //    }

    //    public object Clone()
    //    {
    //        Matrix2DGenotype<E> g = new Matrix2DGenotype<E>(this);
    //        return g;
    //    }

    //    public void CopyTo(Matrix2DGenotype<E> recipient)
    //    {
    //        if (recipient._matrix.GetLength(0) != _matrix.GetLength(0))
    //            throw new ArgumentOutOfRangeException();

    //        if (recipient._matrix.GetLength(1) != _matrix.GetLength(1))
    //            throw new ArgumentOutOfRangeException();

    //        for (int i = 0; i < _matrix.GetLength(0); i++)
    //        {
    //            for (int j = 0; j < _matrix.GetLength(1); j++)
    //            {
    //                recipient._matrix[i, j] = _matrix[i, j];
    //            }
    //        }
    //    }
    //}
}